
11.10.2010, 18:04
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
О URLкодировке с помощью encodeURIComponent
Помогите разобраться.
Начну с малого :
Вот RFC при отправке данных формы говорит, что нужно '&' кодировать, как & (или как '& ;'), если он встречается среди значений полей, но при формировании GET запроса в MSXML2.XMLHTTP для oXMLHTTP.setRequestHeader 'Content-type', 'application/x-www-form-urlencoded' рекомендуется использовать encodeURIComponent(FieldWithAmp) , где FieldWithAmp - поле содержащее '&' ( encodeURIComponent('&')=='%26' , т.е. не дает encodeURIComponent требуемого в RFC '& ;' )
Как это объяснить, как все-таки правильно URL кодировать при GET запросе и 'Content-type', 'application/x-www-form-urlencoded' ?
Последний раз редактировалось kefi, 11.10.2010 в 18:08.
|
|

11.10.2010, 18:34
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
var string = encodeURIComponent('&'); // "%26"
window.location = 'http://example.com/?string='+string; //example.com/?string=%26
и тут почитать
Последний раз редактировалось monolithed, 11.10.2010 в 18:37.
|
|

11.10.2010, 18:53
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
2 monolithed> не проясняет что-то - Вы смотрели ли ссылку на RFC по HTML, приведеную в первом посте? Вопрос связан с ней.
|
|

11.10.2010, 20:18
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Для отправки запроса методом GET используется encodeURIComponent
alert('http://example.com/?id='+encodeURIComponent('Procter&Gamble'));
Если в коде страницы присутствуют спецсимволы типа &, то их нужно заменять на & (или как '& ;') или же если данные формы посылаются методом POST и пр.
|
|

11.10.2010, 20:36
|
 |
Пионэр
|
|
Регистрация: 16.11.2009
Сообщений: 1,322
|
|
Не путайте! Url-кодирование - часть стандарта http, сущности (&...  - часть стандарта html. Эти технологии хоть и сопряжены, но не одно и то же.
|
|

11.10.2010, 21:25
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
Сообщение от monolithed
|
Для отправки запроса методом GET используется encodeURIComponent
alert('http://example.com/?id='+encodeURIComponent('Procter&Gamble'));
Если в коде страницы присутствуют спецсимволы типа &, то их нужно заменять на & (или как '& ;') или же если данные формы посылаются методом POST и пр.
|
Так и не понял :
нужно вместо
alert('http://example.com/?id='+encodeURIComponent('Procter&Gamble'));
использовать
alert('http://example.com/?id='+encodeURIComponent('Procter&Gamble'));
?
Сообщение от subzey
|
Не путайте! Url-кодирование - часть стандарта http, сущности (&... - часть стандарта html. Эти технологии хоть и сопряжены, но не одно и то же.
|
Так объясните как не путать - все же как правильно ?
Или , Дайте , плз, ссылку, где ясно расписано без монбланов RFC, как все же нужно URL кодировать URL'ы при отправке данных формы методом GET ?
|
|

11.10.2010, 21:31
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Ну попробуйте и так и так, если не понимаете. Как заработает, так и делайте.
|
|

11.10.2010, 21:39
|
Кандидат Javascript-наук
|
|
Регистрация: 29.06.2009
Сообщений: 111
|
|
w3.org говорит, что для xml и прочих стандарт это & а всё, что кроме это происки M$
|
|

11.10.2010, 21:59
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
2 JAre> Где именно говорит ? ткните пальцем.
Дело в том, что RFC по HTTP и по HTML при описании URI ссылаются на RFC1738 и новый RFC2396 по URI, где черт ногу сломит, но вот как
Спецификация HTML 4.01 интерпретирует URL кодирование :
Имена ЭУ и значения переводятся в escape-последовательности. Символы пробелов заменяются `+', и затем зарезервированные символы переводятся в escape-последовательности, как описано в [RFC1738], раздел 2.2:
Неалфавитные символы заменяются `%HH', знаком процента и двумя 16-ричными цифрами, представляющими ASCII-код символа.
и тд ....
Т.е., скажем, для " И" русской encodeURIComponent дает %D0%98 - четверка 16-ных символов, а по написанному выше выходит, что должны быть только ДВА шестнадцатиричных символа : "И" -> %C8
И как это понять ?
|
|

11.10.2010, 22:28
|
Кандидат Javascript-наук
|
|
Регистрация: 29.06.2009
Сообщений: 111
|
|
Ну в спеке по xml есть вот, что "The ampersand character (&) and the left angle bracket (<) must not appear in their literal form, except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. If they are needed elsewhere, they must be escaped using either numeric character references or the strings " & " and " < " respectively."
|
|
|
|